home *** CD-ROM | disk | FTP | other *** search
-
- {$X+}
- uses crt;
-
- type
- ModeInfoBlock = record
- ModeAttributes : word; { mode attributes }
- WinAAttributes : byte; { window A attributes }
- WinBAttributes : byte; { window B attributes }
- WinGranularity : word; { window granularity }
- WinSize : word; { window size }
- WinASegment : word; { window A start segment }
- WinBSegment : word; { window B start segment }
- WinFuncPtr : pointer; { pointer to windor function }
- BytesPerScanLine : word; { bytes per scan line }
- XResolution : word; { horizontal resolution }
- YResolution : word; { vertical resolution }
- XCharSize : byte; { character cell width }
- YCharSize : byte; { character cell height }
- NumberOfPlanes : byte; { number of memory planes }
- BitsPerPixel : byte; { bits per pixel }
- NumberOfBanks : byte; { number of banks }
- MemoryModel : byte; { memory model type }
- BankSize : byte; { bank size in kb }
- NumberOfImagePages : byte; { number of images }
- Reserved : byte; { reserved for page function }
- RedMaskSize : byte; { size of direct color red mask }
- RedFieldPosition : byte; { bit position of LSB of red mask }
- GreenMaskSize : byte; { size of direct color green mask }
- GreenFieldPosition : byte; { bit position of LSB of green mask }
- BlueMaskSize : byte; { size of direct color blue mask }
- BlueFieldPosition : byte; { bit position of LSB of blue mask }
- RsvdMaskSize : byte; { size of direct color reserved mask }
- DirectColorModeInfo: byte; { Direct Color mode attributes }
- Reserved2 : array[1..216] of byte; { remainder }
- end;
- Mogis = ^ModeInfoBlock;
-
- var
- modeinfo : Mogis;
- CurBank, i : integer;
- p : ^pointer;
-
- procedure GetModeInfo(mode : word; var block : modeinfoblock); Assembler;
- asm
- mov ax, 4F01h
- mov cx, mode
- les di, block
- int 10h
- end;
-
- procedure BankSwitch(bank : integer); Assembler;
- asm
- mov ax, bank
- cmp CurBank, ax
- je @end
- mov CurBank, ax
- mov ax, 4F05h
- xor bx, bx
- mov dx, bank
- call p
- @end:
- end;
-
- procedure SetVesaMode(mode : word); Assembler;
- asm
- mov ax, 4F02h
- mov bx, mode
- int 10h
- end;
-
- procedure SetText; Assembler;
- asm
- mov ax, 3
- int 10h
- end;
-
- begin
- CurBank := 0;
- SetVesaMode($101);
- GetMem(modeinfo, 256);
- GetModeInfo($101, modeinfo^);
- p := modeinfo^.winfuncptr;
- for i := 0 to 4 do
- begin
- BankSwitch(i);
- Fillchar(mem[$a000:0000], $FFFF, i+1);
- end;
- ReadKey;
- SetText;
- end.